const App = getApp()
const db = wx.cloud.database()
const _ = db.command
const remind = require('../../../../common/remind/remind.js')
let that
Page({

  /**
   * 页面的初始数据
   */
  data: {
    value: '',
    // 选择时间弹窗
    timeShow: false,
    // 班级选择
    show: false,
    loading: true,
    radio: '',
    // 搜索到的课程
    coures: [],
    // 列表上的班级名称
    courseName: "" || '点击绑定课程',
    inputHeight: {
      minHeight: 40
    },
    fileName: ['点击添加附件'],

    // 用来分辨是开始时间还是结束时间
    timeKey: "",
    // 用来改变选择时间右边的箭头
    Arrowhead: "",
    // 初始时间
    TimeValue: "",
    // 时间展示
    addtimeValue: "" || '点击添加时间',
    endtimeValue: "" || '点击添加时间',
    // 创建任务对象
    practice: {
      name: "",
      describe: "",
      addtime: 0,
      endtime: 0,
      courseName: "",
      courseid: "",
      courseMember: [],
      file: "",
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    that = this
    let UserInfo = App.cache.getUserInfo()
    console.log('获取用户信息:', UserInfo);
    delete UserInfo._id
    that.setData({
      UserInfo: UserInfo,
    })

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },
  // 打开班级弹窗
  showPopup() {
    wx.hideKeyboard()
    this.setData({
      show: true
    });
    // 获取我的班级
    this.getMycourse()
  },
  // 关闭班级弹窗
  onClosePopup() {
    this.setData({
      show: false,
      courseName: '点击添加班级',
      ['practice.courseName']: "",
      ['practice.courseid']: null,
    });
  },
  // 打开时间弹窗
  timeShowPopup(e) {
    // 先更新目前时间
    console.log(App.Time.TimeCode());
    that.setData({
      TimeValue: App.Time.TimeCode(),
    })
    let key = e.currentTarget.dataset.only
    let timeKey = ""
    if (key == 'add') {
      timeKey = 'add'
    } else {
      timeKey = 'end'
    }
    console.log('timeKey', timeKey);
    this.setData({
      timeKey: timeKey,
      Arrowhead: timeKey
    });
  },

  TimehandleChange(e) {
    // 获取开始时间还是结束时间
    let key = e.currentTarget.dataset.only
    // 获取标准时间
    let Time = e.detail.dateString
    // 将时间转成时间戳
    let formatTime = new Date(Time).getTime()
    if (formatTime < (Date.now() - 60000)) {
      App.toast.showToast('选择时间不能低于当前时间')
      return false
    }
    if (key == 'add') {
      that.setData({
        // 判断开始还是结束的值
        timeKey: key,
        Arrowhead: key,
        addtimeValue: Time,
        'practice.addtime': formatTime,
      });
    } else {
      // 结束时间不能低于开始时间
      if (formatTime <= that.data.practice.addtime) {
        App.toast.showToast('结束时间不能低于开始时间')
        return false
      }
      that.setData({
        // 判断开始还是结束的值
        timeKey: key,
        Arrowhead: key,
        endtimeValue: Time,
        'practice.endtime': formatTime,
      });
    }
    console.log('开始', that.data.practice.addtime);
    console.log('结束', that.data.practice.endtime);
  },

  // 单选框
  onChangeradio(event) {
    this.setData({
      radio: event.detail,
    });
  },
  // 单选框列表
  onClickradio(event) {
    let data = event.currentTarget.dataset;
    console.log('当前选中的课程的id：', data.value);
    console.log('当前选中的课程的名称：', data.name);
    console.log('当前选中的课程的成员：', data.member);
    this.setData({
      radio: data.value,
      courseName: data.name,
      show: false,
      ['practice.courseName']: data.name,
      ['practice.courseid']: data.value,
      ['practice.courseMember']: data.member,
    });
  },
  // 单选框 end


  // input
  handleChange(event) {
    this.setData({
      [`practice.${event.currentTarget.id}`]: event.detail,
    })
  },

  // 添加附件
  addfile() {
    wx.chooseMessageFile({
      count: 10,
      type: 'all',
      success(res) {
        console.log(res);
        let data = res.tempFiles
        let fileNames = []
        data.forEach(x => {
          fileNames.push(x.name)
        });
        that.setData({
          fileName: fileNames,
          ['practice.file']: data
        })
      },
      fail: function (res) {
        that.setData({
          btnloading: false
        })
      }
    })
  },
  // 删除附件
  removefileName() {
    this.setData({
      fileName: '点击添加附件',
      ['practice.file']: ''
    });
  },
  // 获得课程
  getMycourse() {
    db.collection('course').where({
        'lecturer.account': that.data.UserInfo.account
      })
      .get({
        success: function (res) {
          console.log('获得课程', res.data)
          that.setData({
            coures: res.data,
            loading: false,
          })
        }
      })
  },

  // 创建实践任务校验
  checkPractice() {
    // 获取创建实践任务数组
    let practice = that.data.practice
    if (practice.name == "") {
      App.toast.showToast('名称不能为空')
      return false
    }
    if (practice.courseName == '') {
      App.toast.showToast('必须添加课程')
      return false
    }

    if (practice.addtime === 0 || practice.endtime === 0) {
      App.toast.showToast('时间需填写完整', "error")
      return false
    }

    console.log('practice', practice);
    // 跳转创建实践任务方法
    that.addPractice(practice)
  },
  // 开始创建任务
  addPractice(e) {
    console.log(e);
    let practice = e
    App.toast.showLoading('创建中')
    // 把创始人从成员中去除 (开发方便)
    let newMember = practice.courseMember.filter(item => {
      return item.account != that.data.UserInfo.account
    })
    // 给每个成员加上是否已读、是否提交、是否评阅字段、作业内容、作业附件、评语、成绩
    newMember.forEach(item => {
      item.Read = false
      item.Submit = false
      item.Review = false
      item.content = ""
      item.file = []
      item.Comment = ""
      item.results = ""
    })
    console.log('新的成员数组', newMember);
    // 获取实践任务id,利用时间戳
    let practiceId = (+new Date()).toString().substring(5, 13)
    if (practice.file != '') {
      const uploadTasks = practice.file.map((file, index) => {
        let cloudPath = "实践任务附件/" + practice.courseName + "/" + file.name
        return wx.cloud.uploadFile({
          cloudPath: cloudPath,
          filePath: file.path
        });
      });
      Promise.all(uploadTasks)
        .then(data => {
          console.log('上传成功', data);
          let practiceFile = []
          // 把文件的名称和大小也一并加上去
          data.forEach((element, index) => {
            practiceFile.push({
              name: practice.file[index].name,
              size: (practice.file[index].size / 1024 / 1024).toFixed(2),
              id: element.fileID,
              type: practice.file[index].type,
              fileId: Date.now() + index,
              timeTs: Date.now()
            })
          });
          console.log('practiceFile', practiceFile);
          return practiceFile
        })
        .then(practiceFile => {
          db.collection('practice').add({
            data: {
              practiceId: "pt" + practiceId,
              name: practice.name,
              describe: practice.describe,
              addtime: practice.addtime,
              endtime: practice.endtime,
              file: practiceFile,
              creator: {
                nickName: that.data.UserInfo.nickName,
                account: that.data.UserInfo.account
              },
              courseName: practice.courseName,
              courseid: practice.courseid,
              courseMember: newMember,
              timeTs: Date.now(),
              permissions: true,
              practiceSwitch: practice.addtime - Date.now() < 0 ? true : false,
              practiceState: "尚未开始"
            },
            success: function (res) {
              App.toast.hideLoading()
              // 将实践任务上传到消息中心,
              // 第一项 是消息类别，比如上课提醒、实践任务提醒、系统信息
              //  第二项 是接收信息的成员数组 
              //  第三项 是发布的提醒内容 （有默认项，可不填）
              remind.Message('PracticeMsg', newMember, '你所参与的《' + practice.courseName + '》课程发布了一项实践任务，请赶快查看。')
              console.log('创建成功', res)
              App.toast.showToast('创建成功', 'none')
              setTimeout(() => {
                App.route.redirTo('/pages/teachers/practice/list/index')
              }, 1500)

            }
          })
        })
        .catch(e => {
          App.toast.showToast('创建失败', 'none')
          console.log(e);
        });
    } else {
      db.collection('practice').add({
        data: {
          practiceId: "pt" + practiceId,
          name: practice.name,
          describe: practice.describe,
          addtime: practice.addtime,
          endtime: practice.endtime,
          file: "",
          creator: {
            nickName: that.data.UserInfo.nickName,
            account: that.data.UserInfo.account
          },
          courseName: practice.courseName,
          courseid: practice.courseid,
          courseMember: newMember,
          timeTs: Date.now(),
          permissions: true,
          practiceSwitch: practice.addtime - Date.now() < 0 ? true : false,
          practiceState: "尚未开始"
        },
        success: function (res) {
          App.toast.hideLoading()
          console.log('创建成功', res)
          // 将实践任务上传到消息中心,
          // 第一项 是消息类别，比如上课提醒、实践任务提醒、系统信息
          //  第二项 是接收信息的成员数组 
          //  第三项 是发布的提醒内容 （有默认项，可不填）
          remind.Message('PracticeMsg', newMember, '你所参与的《' + practice.courseName + '》课程发布了一项实践任务，请赶快查看。')
          App.toast.showToast('创建成功', 'none')
          setTimeout(() => {
            App.route.redirTo('/pages/teachers/practice/list/index')
          }, 1500)

        }
      })
    }
  }
})